package d8_demo;

public class BeerDemo03 {
    public static int allNumber;//默认值就是0->记录总酒数
    public static int lastBottleNumber;//上一轮的买酒后的瓶子总数
    public static int lastCoverNumber;//上一轮买酒后的瓶子总数

    public static void main(String[] args) {
        //目标: 啤酒问题, 啤酒2元问题,  4个盖子换一瓶啤酒, 2个空瓶换一瓶, 10元可以换多少瓶, 剩余多收个盖子和空瓶
        //独立功能独立成方法
        buy(10);
        //对结果进行输出
        System.out.println("总瓶子数:" + allNumber);
        System.out.println("剩余瓶子数:" + lastBottleNumber);
        System.out.println("剩余盖子数:" + lastCoverNumber);
    }

    //独立功能独立成方法
    //买啤酒
    public static void buy(int money) {
        //1、拿钱买啤酒: 买多少啤酒
        int number = money / 2;
        //需要一个变量记住中的啤酒数->只希望有一个
        //记住啤酒的总数
        allNumber += number;


        //2、计算出本轮总共的盖子数和空瓶子数, 换算成钱再取买酒
        int totalBottleNumber = lastBottleNumber + number;//本轮的就是等于上一轮的加本轮的买酒数
        int totalCoverNumber = lastCoverNumber + number;

        //3、换成钱继续买酒
        //定义一个变量记录总钱数
        int allMoney = 0;
        //瓶子换成钱 -->先判断是否满足条件进行换钱
        if (totalBottleNumber >= 2) {
            //进行还钱
            allMoney += (totalBottleNumber / 2) * 2;
        }
        //记录剩余的瓶子数
        lastBottleNumber = (totalBottleNumber % 2); //注意这里

        //盖子换成钱 --> 继续买酒
        if (totalCoverNumber >= 4) {
            //进行换钱 --> 然后累加到总钱数上  -->钱可以用局部变量进行记录,是因为这样子换的钱,必定是2的倍数
            allMoney += (totalCoverNumber / 4) * 2;
        }
        //记录剩余的盖子数
        lastCoverNumber = (totalCoverNumber % 4);

        //4、进行递归
        //注意如果是没有盖子数与瓶子数不足以换成钱,就结束递归
        if (allMoney != 0) {
            buy(allMoney);
        }
    }
}
